package com.alex.insistence.web.cgform.goal.plan.service.impl;

import java.io.Serializable;
import java.util.HashMap;
import java.util.Map;
import java.util.UUID;

import org.jeecgframework.core.common.service.impl.CommonServiceImpl;
import org.jeecgframework.core.util.ApplicationContextUtil;
import org.jeecgframework.core.util.MyClassLoader;
import org.jeecgframework.core.util.StringUtil;
import org.jeecgframework.web.cgform.enhance.CgformEnhanceJavaInter;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import com.alex.insistence.web.cgform.goal.plan.entity.GoalPlanEntity;
import com.alex.insistence.web.cgform.goal.plan.service.GoalPlanServiceI;
import com.gomore.jeecg.common.ServiceException;

@Service("goalPlanService")
@Transactional
public class GoalPlanServiceImpl extends CommonServiceImpl implements GoalPlanServiceI {

  public void delete(GoalPlanEntity entity) throws ServiceException {
    super.delete(entity);
    // 执行删除操作增强业务
    this.doDelBus(entity);
  }

  public Serializable save(GoalPlanEntity entity) throws ServiceException {
    Serializable t = super.save(entity);
    // 执行新增操作增强业务
    this.doAddBus(entity);
    return t;
  }

  public void saveOrUpdate(GoalPlanEntity entity) throws ServiceException {
    super.saveOrUpdate(entity);
    // 执行更新操作增强业务
    this.doUpdateBus(entity);
  }

  /**
   * 新增操作增强业务
   * 
   * @param t
   * @return
   */
  private void doAddBus(GoalPlanEntity t) throws ServiceException {
  }

  /**
   * 更新操作增强业务
   * 
   * @param t
   * @return
   */
  private void doUpdateBus(GoalPlanEntity t) throws ServiceException {
  }

  /**
   * 删除操作增强业务
   * 
   * @param id
   * @return
   */
  private void doDelBus(GoalPlanEntity t) throws ServiceException {
  }

  private Map<String, Object> populationMap(GoalPlanEntity t) {
    Map<String, Object> map = new HashMap<String, Object>();
    map.put("id", t.getId());
    map.put("create_name", t.getCreateName());
    map.put("create_by", t.getCreateBy());
    map.put("create_date", t.getCreateDate());
    map.put("update_name", t.getUpdateName());
    map.put("update_by", t.getUpdateBy());
    map.put("update_date", t.getUpdateDate());
    map.put("sys_org_code", t.getSysOrgCode());
    map.put("sys_company_code", t.getSysCompanyCode());
    map.put("title", t.getTitle());
    map.put("content", t.getContent());
    map.put("begin_date", t.getBeginDate());
    map.put("end_date", t.getEndDate());
    map.put("cycle", t.getCycle());
    map.put("type", t.getType());
    map.put("status", t.getStatus());
    map.put("tag", t.getTag());
    return map;
  }

  /**
   * 替换sql中的变量
   * 
   * @param sql
   * @param t
   * @return
   */
  public String replaceVal(String sql, GoalPlanEntity t) {
    sql = sql.replace("#{id}", String.valueOf(t.getId()));
    sql = sql.replace("#{create_name}", String.valueOf(t.getCreateName()));
    sql = sql.replace("#{create_by}", String.valueOf(t.getCreateBy()));
    sql = sql.replace("#{create_date}", String.valueOf(t.getCreateDate()));
    sql = sql.replace("#{update_name}", String.valueOf(t.getUpdateName()));
    sql = sql.replace("#{update_by}", String.valueOf(t.getUpdateBy()));
    sql = sql.replace("#{update_date}", String.valueOf(t.getUpdateDate()));
    sql = sql.replace("#{sys_org_code}", String.valueOf(t.getSysOrgCode()));
    sql = sql.replace("#{sys_company_code}", String.valueOf(t.getSysCompanyCode()));
    sql = sql.replace("#{title}", String.valueOf(t.getTitle()));
    sql = sql.replace("#{content}", String.valueOf(t.getContent()));
    sql = sql.replace("#{begin_date}", String.valueOf(t.getBeginDate()));
    sql = sql.replace("#{end_date}", String.valueOf(t.getEndDate()));
    sql = sql.replace("#{cycle}", String.valueOf(t.getCycle()));
    sql = sql.replace("#{type}", String.valueOf(t.getType()));
    sql = sql.replace("#{status}", String.valueOf(t.getStatus()));
    sql = sql.replace("#{tag}", String.valueOf(t.getTag()));
    sql = sql.replace("#{UUID}", UUID.randomUUID().toString());
    return sql;
  }

  /**
   * 执行JAVA增强
   */
  private void executeJavaExtend(String cgJavaType, String cgJavaValue, Map<String, Object> data)
      throws ServiceException {
    if (StringUtil.isNotEmpty(cgJavaValue)) {
      Object obj = null;
      try {
        if ("class".equals(cgJavaType)) {
          // 因新增时已经校验了实例化是否可以成功，所以这块就不需要再做一次判断
          obj = MyClassLoader.getClassByScn(cgJavaValue).newInstance();
        } else if ("spring".equals(cgJavaType)) {
          obj = ApplicationContextUtil.getContext().getBean(cgJavaValue);
        }
        if (obj instanceof CgformEnhanceJavaInter) {
          CgformEnhanceJavaInter javaInter = (CgformEnhanceJavaInter) obj;
          javaInter.execute(data);
        }
      } catch (Exception e) {
        e.printStackTrace();
        throw new ServiceException("执行JAVA增强出现异常！");
      }
    }
  }
}